package com.javaweb.controller

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
import com.javaweb.pojo.SysMessage
import com.javaweb.pojo.SysUser
import com.javaweb.pojo.SysVote
import com.javaweb.service.SysMessageService
import com.javaweb.service.SysVoteService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.ui.set
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import java.util.*

/**
 * 用户和管理员通用
 * @author Siaze
 * @date 2021/12/10
 */
@Controller
class Common : BaseController() {

    /**
     * sysVoteService是sys_vote表（投票表）查询工具，可以通过自定义查询条件查询数据
     */
    @Autowired
    lateinit var sysVoteService: SysVoteService
    /**
     * sysMessageService是sys_message表（留言表）查询工具，可以通过自定义查询条件查询数据
     */
    @Autowired
    lateinit var sysMessageService: SysMessageService

    /**
     * 判断用户登录是管理员还是学生返回不同页面
     * @param model 返回前端数据
     */
    @RequestMapping("/index")
    fun index(model: Model): String{
        /*
            获取当前登录用户
         */
        val user = getUser()
        /*
            把用户名存入model
         */
        model["name"] = user?.userName!!
        /*
            判断用户登录是管理员还是学生返回不同页面
         */
        return if (user.roles!! == "ADMIN") {
            /*
                查询管理员创建未删除的表
             */
            model["data"] = sysVoteService.list(QueryWrapper<SysVote>().eq("create_by", getSysUserId()).and {
                it.eq("is_delete", false)
            })
            "teacher"
        } else {
            /*
                查询所有未删除的表
             */
            model["data"] = sysVoteService.list(QueryWrapper<SysVote>().eq("is_delete", false))
            "student"
        }
    }

    /*
        主页
     */
    @RequestMapping
    fun defaultUrl(): String{
        return "redirect:/index"
    }
    /**
     * 登录
     */
    @RequestMapping("/login")
    fun login(): String{
        return "login"
    }

    /**
     * 注册
     */
    @GetMapping("/register")
    fun register(): String{
        return "register"
    }

    /**
     * 注册成功返回信息
     */
    @PostMapping("/register")
    fun registerUser(@RequestParam("username") username: String,@RequestParam("password") password :String,model: Model): String{
        val sysUser = SysUser()
        sysUser.userName = username;
        sysUser.password = password;
        sysUserService?.save(sysUser);
        model["sysUser"] = sysUser
        return "registerSuccess"
    }

    /**
     * 用户和管理员留言
     * @PostMapping("/message") post请求的地址
     * @param content 评论的内容
     * @param voteId 评论的投票id
     */
    @PostMapping("/message")
    fun message(@RequestParam content: String, @RequestParam voteId: Long): String {
        /*
            构造一个SysMessage对象保存数据
         */
        val sysMessage = SysMessage()
        sysMessage.userId = getSysUserId()
        sysMessage.createTime = Date()
        sysMessage.voteId = voteId
        sysMessage.message = content
        /*
            保存数据
         */
        try {
            sysMessageService.save(sysMessage)
        }catch (e: Exception){
            System.err.println("留言出错")
        }
        /*
            用户和管理员返回至相应的页面
         */
        return if (getUser()?.roles == "STUDENT")
                   "forward:/view/".plus(voteId)
                else
                   "forward:/edit/".plus(voteId)
    }

}